package org.lanyu.springainovel.novel.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("book_role")
public class BookRole {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField("book_id")
    private Long bookId;

    /**
     * 人设信息，以JSON数组格式存储多个角色信息
     * 格式示例：
     * [
     *   {
     *     "姓名": "角色名称1",
     *     "派系": "角色所属派系1",
     *     "外在特征": "外貌、穿着、体态、行为习惯等外部特征描述",
     *     "内在特征": "性格、价值观、信念、目标等内部特征描述",
     *     "社会特征": "社会地位、职业、人际关系等社会特征描述",
     *     "成长弧光": "角色成长变化轨迹描述",
     *     "作用": "角色在故事中的作用"
     *   },
     *   {
     *     "姓名": "角色名称2",
     *     "派系": "角色所属派系2",
     *     "外在特征": "外貌、穿着、体态、行为习惯等外部特征描述",
     *     "内在特征": "性格、价值观、信念、目标等内部特征描述",
     *     "社会特征": "社会地位、职业、人际关系等社会特征描述",
     *     "成长弧光": "角色成长变化轨迹描述",
     *     "作用": "角色在故事中的作用"
     *   }
     * ]
     * 所有字段都使用中文命名，方便前端渲染。每个角色对象包含完整的人设信息。
     */
    @TableField("character_profile")
    private String characterProfile;

    /**
     * 角色启用状态标识
     * 1表示启用，0表示未启用
     * 当AI撰写小说时，系统仅查询该字段值为1的角色记录作为上下文
     * 同一本书只能有一个角色记录处于启用状态
     */
    @TableField("is_active")
    private Integer isActive;

    /**
     * 备注，用于标识该套角色设定对应的小说时期（如第一卷、第二卷等不同阶段的人物设定差异）
     */
    @TableField("remark")
    private String remark;

    @TableField("version")
    private Integer version;

    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}